package org.raymond.iworks.repository.entity;

import jakarta.persistence.*;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.GenericGenerator;

/**
 * 子级组织继承父级组织的角色, 父级组织包含子级组织的用户组
 * 比如一个集团组织具有进出集团大楼大门的权限,该集团的所有员工都有进出大门的权限.
 * 但是集团总部是集团下的一个组织,与集团某分公司的组织级别同级.则集团总部员工具有进入总部办公室的权限,而分公司的员工不具有进入总部办公室的权限
 * 某些情况下,需要对部分子级组织的权限进行限制,比如进入离职流程的员工不允许翻阅其原属部门内部公开的文档,则该员工应被移至离职流程的用户组,
 * 该用户组归属某部门离职员工这个组织,该组织的是否继承父级角色,为false
 */
@Data
@Builder
@EqualsAndHashCode(onlyExplicitlyIncluded=true, callSuper = false)
@Entity
@Table(name="t_sys_org")
public class TSysOrg extends AbstractEntity {
    /**
     * 组织Id
     */
    @EqualsAndHashCode.Include
    @Id
    @GenericGenerator(name = ID_GENERATOR_NAME, strategy = ID_GENERATOR)
    @GeneratedValue(generator = ID_GENERATOR_NAME)
    private Long id;
    /**
     * 组织名称
     */
    @Column(name="name")
    private String name;
    /**
     * 组织编码
     */
    @Column(name="code")
    private String code;
    @Column(name="parent_id")
    private Long parentId;
    /**
     * 是否从父级继承用户组, Y, N
     */
    @Column(name="inheritance_user_group")
    private Boolean inheritanceUserGroup;
    /**
     * 是否从父级继承角色, Y, N
     */
    @Column(name="inheritance_role")
    private Boolean inheritanceRole;
    /**
     * 状态, stop, normal
     */
    @Column(name="state")
    private String state;
}
